﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess.Client;
using System.Configuration;
using System.Data;
using Entidades.Solicitud;

namespace Persistencia.Solicitud
{
    public class PerTurnarJefeArea : Persistencia.General.IPersistencia
    {
        #region Miembros de IPersistencia

        public void Insertar(Entidades.General.IEntidad entidad)
        {
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            conexion.Open();

            comando = new OracleCommand("PKG_SOLICITUD.insertJefeArea", conexion);
            comando.CommandType = System.Data.CommandType.StoredProcedure;

            try
            {
                OracleParameter parametro1 = new OracleParameter();
                parametro1.OracleDbType = OracleDbType.Int32;
                parametro1.Value = ((EntTurnarJefeArea)entidad).CveSolicitud;
                parametro1.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro1);

                OracleParameter parametro2 = new OracleParameter();
                parametro2.OracleDbType = OracleDbType.Int32;
                parametro2.Value = ((EntTurnarJefeArea)entidad).CveUsuario;
                parametro2.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro2);
                
                comando.ExecuteNonQuery();
            }

            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PerTurnarJefeArea.Insertar";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PerTurnarJefeArea.Insertar";
                throw excepcion;
            }
            finally
            {
                comando = null;
                if (conexion != null)
                    if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
            }
        }

        public void Actualizar(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public void Eliminar(Entidades.General.IEntidad entidad)
        {
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            conexion.Open();

            comando = new OracleCommand("PKG_SOLICITUD.eliminarJefeArea", conexion);
            comando.CommandType = System.Data.CommandType.StoredProcedure;

            try
            {
                OracleParameter parametro1 = new OracleParameter();
                parametro1.OracleDbType = OracleDbType.Int32;
                parametro1.Value = ((EntTurnarJefeArea)entidad).CveSolicitud;
                parametro1.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro1);

                OracleParameter parametro2 = new OracleParameter();
                parametro2.OracleDbType = OracleDbType.Int32;
                parametro2.Value = ((EntTurnarJefeArea)entidad).CveUsuario;
                parametro2.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro2);

                comando.ExecuteNonQuery();
            }

            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PerTurnarJefeArea.Eliminar";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PerTurnarJefeArea.Eliminar";
                throw excepcion;
            }
            finally
            {
                comando = null;
                if (conexion != null)
                    if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
            }
        }

        /// <summary>
        /// Usada en la pantalla de Captura de Obra al eliminar un jefe al que se ha turnado
        /// </summary>
        /// <param name="entidad"></param>
        public void EliminarObraTurnada(Entidades.General.IEntidad entidad)
        {
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            conexion.Open();

            comando = new OracleCommand("PK_SOLICITUD_OBRA.EliminarObraTurnadaA", conexion);
            comando.CommandType = System.Data.CommandType.StoredProcedure;

            try
            {
                OracleParameter parametro1 = new OracleParameter();
                parametro1.OracleDbType = OracleDbType.Int32;
                parametro1.Value = ((EntSolicitudTrabajosRealizar)entidad).CveTrabajoRealizar;
                parametro1.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro1);

                comando.ExecuteNonQuery();
            }

            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PerTurnarJefeArea.Eliminar";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PerTurnarJefeArea.Eliminar";
                throw excepcion;
            }
            finally
            {
                comando = null;
                if (conexion != null)
                    if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
            }
        }
        /// <summary>
        /// Usada en la pantalla de Captura de Obra al al insertar un jefe a turnar
        /// </summary>
        /// <param name="entidad"></param>
        public void InsertarObraTurnadaA(Entidades.General.IEntidad entidad)
        {
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            conexion.Open();

            comando = new OracleCommand("PKG_SOLICITUD_TURNAR.Registrar", conexion);
            comando.CommandType = System.Data.CommandType.StoredProcedure;

            try
            {
                OracleParameter parametro1 = new OracleParameter();
                parametro1.OracleDbType = OracleDbType.Varchar2;
                parametro1.Value = ((EntSolicitudTurnar)entidad).CveSolicitudTurnar;
                parametro1.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro1);

                OracleParameter parametro2 = new OracleParameter();
                parametro2.OracleDbType = OracleDbType.Varchar2;
                parametro2.Value = ((EntSolicitudTurnar)entidad).CveUsuario;
                parametro2.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro2);

                OracleParameter parametro3 = new OracleParameter();
                parametro3.OracleDbType = OracleDbType.Varchar2;
                parametro3.Value = ((EntSolicitudTurnar)entidad).Comentarios;
                parametro3.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro3);

                OracleParameter parametro4 = new OracleParameter();
                parametro4.OracleDbType = OracleDbType.Varchar2;
                parametro4.Value = ((EntSolicitudTurnar)entidad).CveTrabajoRealizar;
                parametro4.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro4);

                OracleParameter parametro5 = new OracleParameter();
                parametro5.OracleDbType = OracleDbType.Varchar2;
                parametro5.Value = ((EntSolicitudTurnar)entidad).CveUsuarioTurno;
                parametro5.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro5);

                comando.ExecuteNonQuery();
            }

            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PKG_SOLICITUD_TURNAR.Registrar";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PKG_SOLICITUD_TURNAR.Registrar";
                throw excepcion;
            }
            finally
            {
                comando = null;
                if (conexion != null)
                    if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
            }
        }
        public Entidades.General.IEntidad Obtener(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public List<Entidades.General.IEntidad> ObtenerTodos(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public List<Entidades.General.IEntidad> ObtenerTodos()
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}
